package br.foton.la.agenda.entity;

import java.io.Serializable;
import java.util.Date;
import java.util.List;

import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.JoinColumn;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import br.foton.la.agenda.enums.EnumFormacao;

@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@SequenceGenerator(name="pessoaGenerator",sequenceName="PESSOA_SEQ",allocationSize=1)
@NamedQueries({@NamedQuery(name = Pessoa.GET_BY_LOGIN,query="select p from Pessoa p where p.login = :login and p.senha = :senha")})
public class Pessoa implements Serializable{
	private static final long serialVersionUID = 1L;
	public static final String GET_BY_LOGIN = "Pessoa.GET_BY_LOGIN";
	
	@Id
	@GeneratedValue(generator="pessoaGenerator",strategy=GenerationType.SEQUENCE)
	private Integer id;
	@Column(nullable = false, length = 50)
	private String nome;
	@Column(length = 20)
	private String rg;
	@Column(nullable = false, length = 15, updatable = false)
	private String cpf;
	@Column(name = "dt_nascimento", nullable = false, updatable = false)
	@Temporal(TemporalType.DATE)
	private Date dataNascimento;
	@Column(name = "dt_admissao", nullable = false)
	@Temporal(TemporalType.TIMESTAMP)
	private Date dataAdmissao;
	@OneToMany(cascade=CascadeType.ALL, fetch = FetchType.EAGER)
	@JoinColumn(name = "pessoa_id")
	private List<Telefone> telefones;
	@Column(nullable = false)
	private EnumFormacao escolaridade;
	@Column(nullable = false, columnDefinition="Decimal(6,2)")
	private double salario;
	@Column(nullable = false, length = 30, updatable = false)
	private String login;
	@Column(nullable = false, length = 30)
	private String senha;
	
	public Pessoa(String nome, String rg, String cpf, String login, String senha) {
		setNome(nome);
		setRg(rg);
		setCpf(cpf);
		setDataNascimento(new Date());
		setDataAdmissao(new Date());
		setLogin(login);
		setSenha(senha);
	}
	
	public Pessoa() {
		// TODO Auto-generated constructor stub
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}
	
	@Basic(fetch=FetchType.LAZY)
	public String getRg() {
		return rg;
	}

	public void setRg(String rg) {
		this.rg = rg;
	}

	@Basic(fetch=FetchType.LAZY)
	public String getCpf() {
		return cpf;
	}

	public void setCpf(String cpf) {
		this.cpf = cpf;
	}

	@Basic(fetch=FetchType.LAZY)
	public Date getDataNascimento() {
		return dataNascimento;
	}

	public void setDataNascimento(Date dataNascimento) {
		this.dataNascimento = dataNascimento;
	}
	@Basic(fetch=FetchType.LAZY)
	public Date getDataAdmissao() {
		return dataAdmissao;
	}

	public void setDataAdmissao(Date dataAdmissao) {
		this.dataAdmissao = dataAdmissao;
	}

	public List<Telefone> getTelefones() {
		return telefones;
	}

	public void setTelefones(List<Telefone> telefones) {
		this.telefones = telefones;
	}
	
	@Basic(fetch=FetchType.LAZY)
	public EnumFormacao getEscolaridade() {
		return escolaridade;
	}

	public void setEscolaridade(EnumFormacao escolaridade) {
		this.escolaridade = escolaridade;
	}

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public double getSalario() {
		return salario;
	}

	public void setSalario(double salario) {
		this.salario = salario;
	}

	public String getLogin() {
		return login;
	}

	public void setLogin(String login) {
		this.login = login;
	}

	public String getSenha() {
		return senha;
	}

	public void setSenha(String senha) {
		this.senha = senha;
	}

}
